package org.sunyaxing.transflow.api.netty;

import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import java.net.InetSocketAddress;


/**
 * Netty 客户端处理器类，继承自 SimpleChannelInboundHandler<String> 以处理服务器发送的字符串数据
 *
 * @author chenlei
 */
public class NettyTcpClientHandler extends SimpleChannelInboundHandler<String> {


    private static final Logger log = LoggerFactory.getLogger(NettyTcpClientHandler.class);


    /**
     * Netty 客户端实例，用于调用重连等操作
     */
    private final DataTransor nettyTcpClient;


    /**
     * 初始化相关参数
     */
    public NettyTcpClientHandler(DataTransor nettyTcpClient) {
        this.nettyTcpClient= nettyTcpClient;
    }


    /**
     * 当接收到服务器发送的数据时调用此方法
     *
     * @param ctx      通道处理器上下文，可用于执行通道操作，如发送数据、关闭通道等
     * @param response 从服务器接收到的响应字符串
     */
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, String response) {
        log.info("接收处理服务器响应数据");
        //以下进行具体的业务操作
    }


    /**
     * 当发生异常时调用此方法
     *
     * @param ctx   通道处理器上下文
     * @param cause 异常对象
     */
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        // 打印异常信息
        log.error("处理服务器响应时出错，异常信息: {}", cause.getMessage(), cause);
        // 关闭当前通道
        ctx.close();
    }


    /**
     * 当通道关闭时调用此方法
     *
     * @param ctx 通道处理器上下文
     */
    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        //final Channel channel = ctx.channel();
        // 获取远程服务器的端口号
        //int port = ((InetSocketAddress) channel.remoteAddress()).getPort();
        //log.info("通道处于非活动状态，正在尝试在端口上重新连接: {}", port);
        // 获取 NettyTcpClientHandler 中存储的 NettyClient 实例
        //DataTransor nettyTcpClient = ((NettyTcpClientHandler) ctx.handler()).nettyTcpClient;
        // 调用 nettyTcpClient 中的 reconnect 方法进行重连
        //nettyTcpClient.connect();
        super.channelInactive(ctx);
    }
}
